// 1.检查传参是否等于2 等于2的话需要让accumulate为intial的值，开始的索引为0
// 没有initial的话就应该让accumulate=等于第一个不为空的数字，开始的索引为i+1
// 2.检查start索引是不是等于-1，等于-1说明数组没有数字
// 3.进行累加 进行函数传参调用，注意遍历开始的索引为startIndex,最后返回accumulate

Array.prototype.myReduce=function(fn,initial){
    if(typeof fn!=='function'){
        throw new TypeError(`${fn} is not function`)
    }
    let startIndex,accumulate
    if(arguments.length==2){
      accumulate=initial
      startIndex=0
    }else{
      startIndex=-1
      for(let i=0;i<this.length;i++){
        if(Object.hasOwnProperty.call(this,i)){
          accumulate=this[i]
          startIndex=i+1
          break
        }
      }
    }
  
    if(startIndex===-1){
      throw new TypeError(`${this} is a empty Array`)
    }
  
    for(let i=startIndex;i<this.length;i++){
      if(Object.hasOwnProperty.call(this,i)){
        accumulate=fn(accumulate,this[i],i,this)
      }
    }
    return accumulate
  }
  let arr=[1]
  console.log(arr.myReduce((a,b)=>a+b));
  console.log(arr.reduce((a,b)=>a+b));